package com.woniu.secondhand.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.woniu.common.entity.PageData;
import com.woniu.secondhand.entity.dto.SellProductAddDTO;
import com.woniu.secondhand.entity.dto.SellProductSearchDTO;
import com.woniu.secondhand.entity.dto.WantProductAddDTO;
import com.woniu.secondhand.entity.dto.WantProductSearchDTO;
import com.woniu.secondhand.entity.vo.SellProductSearchVO;
import com.woniu.secondhand.entity.vo.WantProductSearchVO;
import com.woniu.secondhand.pojo.SecondhandProduct;
import com.woniu.user.vo.UserLoginVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author HMMT
 * @since 2023-05-20
 */
public interface ISecondhandProductService extends IService<SecondhandProduct> {

    /**
     * 用户可以浏览已审核通过的出售/求购商品列表。
     *
     * @param currentPage
     * @param pageSize
     * @param sellProductSearchDTO
     * @return
     */
    PageData<List<SellProductSearchVO>> searchSell(Integer currentPage, Integer pageSize, SellProductSearchDTO sellProductSearchDTO);

    /**
     * 用户可以浏览已审核通过的出售/求购商品列表。
     *
     * @param currentPage
     * @param pageSize
     * @param wantProductSearchDTO
     * @return
     */
    PageData<List<WantProductSearchVO>> searchWant(Integer currentPage, Integer pageSize, WantProductSearchDTO wantProductSearchDTO);

    /**
     * 管理员可以查看并审核未经审核的出售/求购商品信息。
     *
     * @param currentPage
     * @param pageSize
     * @param sellProductSearchDTO
     * @return
     */
    PageData<List<SecondhandProduct>> searchSellAndUnverified(Integer currentPage, Integer pageSize, SellProductSearchDTO sellProductSearchDTO);

    /**
     * 管理员可以查看并审核未经审核的出售/求购商品信息。
     *
     * @param currentPage
     * @param pageSize
     * @param wantProductSearchDTO
     * @return
     */
    PageData<List<SecondhandProduct>> searchWantAndUnverified(Integer currentPage, Integer pageSize, WantProductSearchDTO wantProductSearchDTO);

    /**
     * 系统实现了对出售/求购商品的审核流程，以确保信息的准确性和可靠性。
     *
     * @param productId
     * @return
     */
    int updateToVerify(Integer productId);

    /**
     * 用户可以发布自己要出售或求购的二手商品信息。
     *
     * @param productAddDTO
     * @param userLoginVO
     * @return
     */
    SecondhandProduct addSellProduct(SellProductAddDTO productAddDTO, UserLoginVO userLoginVO);

    /**
     * 用户可以发布自己要出售或求购的二手商品信息。
     *
     * @param productAddDTO
     * @param userLoginVO
     * @return
     */
    SecondhandProduct addWantProduct(WantProductAddDTO productAddDTO, UserLoginVO userLoginVO);

    /**
     * 用户可以通过系统获取到商品卖家的联系方式，以便进行沟通和交流。
     *
     * @param productId
     * @param userLoginVO
     * @return
     */
    String contactToProducer(Integer productId, UserLoginVO userLoginVO);

    /**
     * 用户可以将已购买的商品标记为未购买状态，用于取消订单或重新上架商品。
     *
     * @param productId
     * @return
     */
    int updateToUnsold(Integer productId);

    /**
     * 展示自己发布过的产品
     *
     * @param userLoginVO
     * @return
     */
    List<SecondhandProduct> listPublish(UserLoginVO userLoginVO);

    /**
     * 展示自己卖掉过的产品
     *
     * @param userLoginVO
     * @return
     */
    List<SecondhandProduct> listSold(UserLoginVO userLoginVO);

    /**
     * 展示自己买到手的产品
     *
     * @param userLoginVO
     * @return
     */
    List<SecondhandProduct> listBought(UserLoginVO userLoginVO);

    /**
     * 计算自己赚了多少钱
     *
     * @param userLoginVO
     * @return
     */
    BigDecimal getEarned(UserLoginVO userLoginVO);
}
